import request from '@/utils/request'
import { AxiosResponse } from 'axios'
import {
  AdminAddAdimParams,
  GetAllAdminRes,
  UpdateAdminInfoParams,
  GetAdminByIdRes,
  BasePageQuery,
} from './type'
import qs from 'qs'

// 项目用户相关的请求地址
enum Admin_API {
  POST_ADD_ADMIN_PAGE = '/teaching_system/admin/addAdmin',
  GET_ADMIN_PAGE = '/teaching_system/admin/getAllAdmin',
  GET_ADMIN_BYID = '/teaching_system/stu/getById/{stuId}',
  DELETE_ADMIN_BYID = '/teaching_system/admin/deleteAdmin/{adminId}',
  PUT_UPDATE_ADMIN = '/teaching_system/stu/updateStu',
}

/**
 * 添加管理员
 * @param {object} params AddAdminForm
 * @param {number} params.adminId 管理员职工号
 * @param {string} params.name 管理员名字
 * @param {string} params.gender 管理员性别
 * @param {object} params.birthday 管理员生日
 * @param {string} params.department 管理员学院名称
 * @param {string} params.phone 管理员电话号码
 * @param {string} params.address 管理员住址
 * @param {string} params.idCard 管理员身份证号
 * @returns
 */
export const adminAddAdim = (params: AdminAddAdimParams) =>
  request.post<any, AxiosResponse<string>>(
    Admin_API.POST_ADD_ADMIN_PAGE,
    params,
  )

/**
 * 删除管理员
 * @param {string} adminId
 * @returns
 */
export const deleteAdmin = (adminId: number) =>
  request.delete<any, AxiosResponse<string>>(
    Admin_API.DELETE_ADMIN_BYID.replace('{adminId}', adminId.toString()),
  )

/**
 * 获得管理员列表
 * @param {string} pageNum 页码
 * @param {string} pageSize 每页记录数
 * @returns
 */
export const getAllAdmin = (params: BasePageQuery) =>
  request.get<any, AxiosResponse<GetAllAdminRes>>(
    Admin_API.GET_ADMIN_PAGE + '?' + qs.stringify(params),
  )

/**
 * 根据id获取管理员信息
 * @param {string} adminId
 * @returns
 */
export const getAdminById = (adminId: number) =>
  request.get<any, AxiosResponse<GetAdminByIdRes>>(
    Admin_API.GET_ADMIN_BYID.replace('{adminId}', adminId.toString()),
  )

/**
 * 修改管理员信息
 * @param {object} params UpdateAdminForm
 * @param {number} params.adminId 管理员职工号
 * @param {string} params.name 管理员名字
 * @param {string} params.gender 管理员性别
 * @param {object} params.birthday 管理员生日
 * @param {string} params.department 管理员学院名称
 * @param {string} params.phone 管理员电话号码
 * @param {string} params.address 管理员住址
 * @param {string} params.idCard 管理员身份证号
 * @returns
 */
export const updateAdminInfo = (params: UpdateAdminInfoParams) =>
  request.post<any, AxiosResponse<string>>(Admin_API.PUT_UPDATE_ADMIN, params)
